-- 参数1 优惠卷id
local VoucherId = ARGV[1]
-- 参数2 用户id
local userId = ARGV[2]
-- 拼接库存key 订单key
-- 参数3 订单id
local orderId = ARGV[3]

local stockKey = 'seckill:stock:' .. VoucherId

local orderKey = ('seckill:order:') .. userId
-- 判断库存是否充足 不足返回1
if (tonumber(redis.call('get',stockKey)) <= 0) then
    return 1
end
-- 判断用户之前是否下过单 如果等于1 说明存在
if(redis.call('sismember',orderKey,userId) == 1)then
    return 2
end
-- 如果执行到这里说明库存充足且没下过单 执行扣减库存 下单操作
redis.call('incrby',stockKey,-1)
redis.call('sadd',orderKey,userId)
-- 向stream队列发送消息
redis.call('xadd','stream.orders','*', 'userId',userId 'VoucherId',VoucherId,'id',orderId)

return 0